// 类和实例

// 定义类(class)
// 从 ECMA Script 2015 (ES6) 开始允许使用 class 关键字来定义"类" (语法糖)
class Student {
    // 在类体括号中可以直接定义属性
    id = 0;
    name = '';
    age = 0;
    // 被static修饰的属性属于类，因此可以被称作类属性(也被称作静态属性)
    static school = '开发喵学院';
    // 在类体括号内用 constructor 定义构造函数
    constructor(id,name,age){
        this.id = id;
        this.name = name;
        this.age = age;
    }
    // 在类体括号中可以直接定义方法(methods)
    introduce(){
        console.log(`我叫${this.name}，今年虚岁${this.age}`);
    }
    // 被 static 修饰的方法属于类，被称作类方法(也被称作静态方法)
    static show(){
        // console.log( school ); // ReferenceError: school is not defined
        console.log( Student.school ); // 类属性只能通过定义它的类来访问
    }
}

// 创建实例(instance)
// 通过 new 关键字来创建"类"的实例
let instance = new Student( 1001, '阿芳', 22 );
console.log( instance );
// 调用实例方法
instance.introduce();

// 尝试通过实例去调用类方法
// instance.show(); // TypeError: instance.show is not a function

// 类方法只能通过定义它的类来调用
Student.show();


// 总结
// 1、用语法糖定义类(class)
// 2、在类体中定义属性、构造、方法
// 3、创建实例
// 4、访问属性(为属性赋值和获取属性值)
// 5、调用方法(调用类方法、调用实例方法)
